﻿using System;
using System.Data;
using BLL;
using DAL;
using Ext.Net;
using Roles;

namespace ERP.Modules
{
    public partial class ModulesMain : System.Web.UI.UserControl
    {
        #region[Define]
        private static bool _flag;
        private DataTable _dtGetModules;
        private DataTable _dtGetModulesEdit;
        private readonly BllModules _clsModules = new BllModules();
        #endregion

        #region[Controller]
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!X.IsAjaxRequest)
            {
                CheckPermisstion();
                GetModulesMain();
                btnEdit.Disable(true);
                btnDel.Disable(true);
                btnExport.Disable(true);
            }
        }
        protected void StoreModulesMain_RefreshData(object sender, StoreReadDataEventArgs e)
        {
            txtSearch.Text = string.Empty;
            GetModulesMain();
        }
        protected void ModulesMainDblClick(object sender, DirectEventArgs e)
        {
            _flag = false;
            ClearText();
            int ModulesMain_ID = int.Parse(e.ExtraParams["ModulesMain_ID"]);
            GetModulesEdit(ModulesMain_ID);
            WindowsModulesMain.Show();
        }
        //Button
        protected void btnAddNew_Click(object sender, DirectEventArgs e)
        {
            _flag = true;
            ClearText();
            WindowsModulesMain.Show();
            txtModulesMain.Focus(false, 100);
        }
        protected void btnEdit_Click(object sender, DirectEventArgs e)
        {
            var sm = grModulesMain.GetSelectionModel() as CheckboxSelectionModel;
            if (sm != null)
                foreach (var row in sm.SelectedRows)
                {
                    _flag = false;
                    ClearText();
                    GetModulesEdit(int.Parse(row.RecordID));
                    WindowsModulesMain.Show();
                }
        }
        protected void btnDel_Click(object sender, DirectEventArgs e)
        {
            var sm = grModulesMain.GetSelectionModel() as CheckboxSelectionModel;
            if (sm != null)
                foreach (var row in sm.SelectedRows)
                {
                    try
                    {
                        var obj = new EtModuleMain { ModulesMainId = int.Parse(row.RecordID) };
                        BllModules.Delete(obj);
                        if (obj.msg == 0)
                            HTML.clsFormat.Alert_ERROR("Thông Báo", "Tồn tại tài liệu con, không xoá được vui lòng xoá tài liệu con trước !");

                    }
                    catch (Exception ex)
                    {
                        HTML.clsFormat.Alert_ERROR("Thông Báo", ex.Message);
                    }
                }
            GetModulesMain();
        }
        protected void btnSavePopUp_Click(object sender, DirectEventArgs e)
        {
            Insert();
        }
        protected void btnCancelPopUp_Click(object sender, DirectEventArgs e)
        {
            WindowsModulesMain.Close();
        }
        //Search
        protected void Search_Event(object sender, DirectEventArgs e)
        {
            DataTable dtSearch = _clsModules.GetModulesMain(txtSearch.Text);
            if (dtSearch != null && dtSearch.Rows.Count > 0)
            {
                StoreModulesMain.DataSource = dtSearch;
                StoreModulesMain.DataBind();
            }
            else
            {
                grModulesMain.GetStore().RemoveAll();
            }
        }
        #endregion

        #region[Method]
        private void GetModulesMain()
        {
            _dtGetModules = _clsModules.GetModulesMain(txtSearch.Text);
            if (_dtGetModules != null && _dtGetModules.Rows.Count > 0)
            {
                StoreModulesMain.DataSource = _dtGetModules;
                StoreModulesMain.DataBind();
            }
            else
            {
                grModulesMain.GetStore().RemoveAll();
            }
        }
        private void GetModulesEdit(int id)
        {
            _dtGetModulesEdit = _clsModules.GetModulesMainEdit(id);
            if (_dtGetModulesEdit != null && _dtGetModulesEdit.Rows.Count > 0)
            {
                hdIDModulesMain.Text = _dtGetModulesEdit.Rows[0]["ModulesMain_ID"].ToString();
                txtModulesMain.Text = _dtGetModulesEdit.Rows[0]["ModulesMain_Name"].ToString();
                txtNum.Text = _dtGetModulesEdit.Rows[0]["Num"].ToString();
                txtDescription.Text = _dtGetModulesEdit.Rows[0]["Descripttion"].ToString();
            }
        }
        private bool CheckInsert()
        {
            var check = false;
            var dtCheck = _clsModules.GetModulesMain(txtSearch.Text);
            if (dtCheck != null && dtCheck.Rows.Count > 0)
            {
                foreach (DataRow dr in dtCheck.Rows)
                {
                    if (hdIDModulesMain.Text != dr["ModulesMain_ID"].ToString())
                    {
                        if (txtModulesMain.Text == dr["ModulesMain_Name"].ToString())
                        {
                            check = true;
                            HTML.clsFormat.Alert_ERROR("Thông Báo",
                                "Tên User Controls " + txtModulesMain.Text + " đã tồn tại !");
                        }
                        else if (txtDescription.Text == dr["Descripttion"].ToString())
                        {
                            check = true;
                            HTML.clsFormat.Alert_ERROR("Thông Báo",
                                "Tên Modules " + txtDescription.Text + " đã tồn tại !");
                        }
                    }
                }
            }
            return check;
        }
        private void Insert()
        {
            if (_flag)
            {
                InsertValue();
            }
            else
            {
                if (CheckPermisstionDobclick())
                {
                    HTML.clsFormat.Alert_ERROR("Thông Báo", "Bạn không được cấp quyền để sửa đổi !");
                }
                else
                {
                    UpdateValue();
                }
            }
        }
        private void InsertValue()
        {
            try
            {
                if (!CheckInsert())
                {
                    var obj = new EtModuleMain { ModulesMainName = txtModulesMain.Text, Num = Int16.Parse(txtNum.Text), Descripttion = txtDescription.Text };
                    BllModules.Insert(obj);
                    HTML.clsFormat.Alert_INFO("Thông Báo", "Thêm mới Modules thành công !");
                }
                GetModulesMain();
                ClearText();
            }
            catch (Exception ex)
            {
                HTML.clsFormat.Alert_ERROR("Lỗi", ex.Message);
            }
        }
        private void UpdateValue()
        {
            try
            {
                if (!CheckInsert())
                {
                    var obj = new EtModuleMain
                    {
                        ModulesMainId = int.Parse(hdIDModulesMain.Text),
                        ModulesMainName = txtModulesMain.Text,
                        Num = int.Parse(txtNum.Text),
                        Descripttion = txtDescription.Text
                    };
                    BllModules.Update(obj);
                    HTML.clsFormat.Alert_INFO("Thông Báo", "Cập nhật Modules thành công !");
                    WindowsModulesMain.Close();
                    GetModulesMain();
                    ClearText();
                }
            }
            catch (Exception ex)
            {
                HTML.clsFormat.Alert_ERROR("Lỗi", ex.Message);
            }
        }
        #endregion

        #region[Clear-Text]
        private void ClearText()
        {
            hdIDModulesMain.Text = string.Empty;
            txtModulesMain.Text = string.Empty;
            txtNum.Text = "0";
            txtDescription.Text = string.Empty;
        }
        #endregion

        #region[Permisstion]
        private void CheckPermisstion()
        {
            if (Session["login"] != null && Session["USer_Detail_Id"].ToString() != string.Empty)
            {
                bool Is_BtnAdd;
                bool Is_BtnEdit;
                bool Is_BtnView;
                bool Is_BtnDel;
                bool Is_BtnPrint;
                bool Is_BtnCancel;
                bool Is_BtnReview;

                SecurityServices.HasPermisstion_Btn(StringContent.ModulesMain, out Is_BtnAdd, out Is_BtnEdit, out Is_BtnDel, out Is_BtnView, out Is_BtnCancel, out Is_BtnPrint, out Is_BtnReview);
                if (Is_BtnAdd == false)
                {
                    btnAddNew.Visible = false;
                }
                if (Is_BtnEdit == false)
                {
                    btnEdit.Visible = false;
                }
                if (Is_BtnView == false)
                {
                    PanelModulesMain.Visible = false;
                }
                if (Is_BtnDel == false)
                {
                    btnDel.Visible = false;
                }
                if (Is_BtnPrint == false)
                {
                    btnExport.Visible = false;
                }
            }
        }
        private bool CheckPermisstionDobclick()
        {
            var check = false;
            if (Session["login"] != null && Session["USer_Detail_Id"].ToString() != string.Empty)
            {
                bool Is_BtnAdd;
                bool Is_BtnEdit;
                bool Is_BtnView;
                bool Is_BtnDel;
                bool Is_BtnPrint;
                bool Is_BtnCancel;
                bool Is_BtnReview;

                SecurityServices.HasPermisstion_Btn(StringContent.ModulesMain, out Is_BtnAdd, out Is_BtnEdit, out Is_BtnDel, out Is_BtnView, out Is_BtnCancel, out Is_BtnPrint, out Is_BtnReview);
                if (Is_BtnEdit == false)
                {
                    check = true;
                }
            }
            return check;
        }
        #endregion
    }
}